#pragma once

#include <map>
#include <string>

#include <ipc_message_parcel.h>

// 这个接口定义脱离 IpcServiceRegistry 就没有意义了，所以没有自己的头文件
class IIpcService {
public:
    virtual ~IIpcService() = default;

    virtual int GetID() const = 0;
    virtual void Process(IpcMessageParcel &parcel) = 0;
};

class IpcServiceRegistry {
public:
    // for client
    virtual void AddService(IIpcService &service);
    virtual void RemoveService(const IIpcService &service);

    // for server
    virtual void DispatchMessage(IpcMessageParcel &parcel);

private:
    std::map<int, IIpcService&> services;
};
